// 1. 把每对括号最终变为1个数
// 2. 把树变成这样：
//      +
//    a   *
//      b   ^
//        c   d
#include <iostream>
#include <unordered_map>
#include <string>
#include <stack>
using namespace std;

stack<char> op;
stack<int> num;
void eval() // 处理最后两个树和最后一个符号
{
    int b = num.top(); num.pop();
    int a = num.top(); num.pop();
    char c = op.top(); op.pop();
    int x = 0;
    if(c == '+') x = a + b;
    if(c == '-') x = a - b;
    if(c == '*') x = a * b;
    if(c == '/') x = a / b;
    num.push(x);
}

int main()
{
    string str; cin >> str;
    int size = str.size();
    unordered_map<char, int> p({{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}}); // 优先级
    for(int i = 0; i < size; ++i)
    {
        char c = str[i];
        if(isdigit(c))
        {
            int len = 0;
            while(i + len < size && isdigit(str[i + len])) ++len;
            num.push(stoi(str.substr(i, len)));
            i += len - 1;
        }
        else if(c == '(') op.push(c);
        else if(c == ')')
        {
            while(op.size() && op.top() != '(') eval();
            op.pop();
        }
        else
        {
            while(op.size() && p[op.top()] >= p[c]) eval();
            op.push(c);
        }
    }
    while(op.size()) eval();
    cout << num.top();
    return 0;
}